import struct

def convert_little_endian_to_big_endian(input_file, output_file, byte_width):
    """
    支持任意字节数的大小端转换
    :param input_file: 输入文件名（小端格式）
    :param output_file: 输出文件名（大端格式）
    :param byte_width: 每个数据的字节数（如2=16位，4=32位）
    """
    hex_len = byte_width * 2  # 每字节2个十六进制字符
    with open(input_file, 'r') as f_in, open(output_file, 'w') as f_out:
        for line in f_in:
            hex_str = line.strip()
            if not hex_str:
                continue  # 跳过空行
            if len(hex_str) != hex_len:
                raise ValueError(f"无效的十六进制值: {hex_str}，应为{hex_len}字符")
            bytes_le = bytes.fromhex(hex_str)
            bytes_be = bytes_le[::-1]
            hex_be = bytes_be.hex()
            f_out.write(hex_be + '\n')

if __name__ == "__main__":
    input_filename = "D:/FPGA/Full/TPU/SA/TPU/top/systolic_array/testbench/int4_int32/m32n8k16/c_int32_m32n8k16_hex.txt"  # 输入文件（小端）
    output_filename = "c_int32_big_endian_m32n8k16_hex.txt"  # 输出文件（大端）
    byte_width = 4  # 每个数据的字节数，4=32位，2=16位，可根据需要修改
    convert_little_endian_to_big_endian(input_filename, output_filename, byte_width)
    print(f"转换完成！结果已保存至: {output_filename}")